package org.example;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class Card{
    public int rank;//牌面值
    public String suit;//花色

    @Override
    public String toString() {
        return String.format("[%s %d]", suit, rank);
    }
}
public class CardDemo {
    public static final String[] SUITS={"♠","♥","♣","♦"};
    //买一副牌
    private static List<Card> buyDeck(){
        List<Card> deck=new ArrayList<>();
        for (int i=0;i<4;i++){
            for (int j=1;j<=13;j++){
                String suit=SUITS[ i];
                int rank=j;
                Card card=new Card();
                card.rank=rank;
                card.suit=suit;
                deck.add(card);
            }
        }
        return deck;
    }
    //交换两张牌的位置
    private static void swap(List<Card> deck,int i,int j){
        Card t=deck.get(i);
        deck.set(i,deck.get(j));
        deck.set(j,t);
    }
    //从后往前依次遍历[0,i),交换随机r位置的牌和当前i位置的牌
    private static void shuffle(List<Card> deck){
        Random random=new Random();
        for (int i=deck.size()-1;i>0;i--){
            int r=random.nextInt(i);
            swap(deck,i,r);
        }
    }

    public static void main(String[] args) {
        List<Card> deck=buyDeck();
        System.out.println("刚买回来的牌:");
        System.out.println( deck);
        shuffle(deck);
        System.out.println("洗过的牌:");
        System.out.println(deck);
        // 三个⼈，每个⼈轮流抓 5 张牌
        List<List<Card>> hands=new ArrayList<>();
        hands.add(new ArrayList<>());
        hands.add(new ArrayList<>());
        hands.add(new ArrayList<>());
        for (int i=0;i<5;i++){
            for (int j=0;j<3;j++){
                hands.get(j).add(deck.remove(0));
            }
        }
        System.out.println("剩余的牌");
        System.out.println(deck);
        System.out.println("A ⼿中的牌:");
        System.out.println(hands.get(0));
        System.out.println("B ⼿中的牌:");
        System.out.println(hands.get(1));
        System.out.println("C ⼿中的牌:");
        System.out.println(hands.get(2));

    }
}
